"""
@File    :   handler.py
@Time    :   2024/01/07 20:00:53
@Author  :   Qrj
@Email   :   923207736@qq.com
@description   :   全局异常类的处理器及其注册方法
"""

from fastapi import FastAPI
from fastapi.exceptions import HTTPException, RequestValidationError
from sqlalchemy.exc import IntegrityError

from src.exceptions.base import AppException


def register_global_exceptions_handler(app: FastAPI):
    """注册全局异常类的处理器"""
    from src.exceptions.handlers.app_exception import app_exception_handler
    from src.exceptions.handlers.global_exception import global_exception_handler
    from src.exceptions.handlers.http_exception import http_exception_handler
    from src.exceptions.handlers.request_validation import validation_exception_handler
    from src.exceptions.handlers.sqlalchemy_exception import (
        sqlalchemy_integrity_error_exception_handler,
    )

    # 非自定义的响应状态异常处理
    app.add_exception_handler(HTTPException, http_exception_handler)
    # sqlalchemy完整性错误(外键、unique、联合unique重复)异常处理
    app.add_exception_handler(
        IntegrityError, sqlalchemy_integrity_error_exception_handler
    )
    # 请求参数验证的异常处理
    app.add_exception_handler(RequestValidationError, validation_exception_handler)
    # 处理自定义异常
    app.add_exception_handler(AppException, app_exception_handler)
    # 全局异常处理(放到最后注册)
    app.add_exception_handler(Exception, global_exception_handler)
